﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace SPA_Gallery
{
    /// <summary>
    /// Description résumée de FileHandler
    /// </summary>
    public class FileHandler : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {

            if (context.Request.Files.Count > 0)
            {
                String portalId = context.Request.Params["PortalId"];
                String moduleId = context.Request.Params["ModuleId"];
                string folderIdStr = context.Request.Params["FolderId"];

                //Récupération du fichier à uploader
                HttpPostedFile file = context.Request.Files[0];

                // Création du chemin cible
                if (!string.IsNullOrEmpty(folderIdStr))
                {
                    int folderId = int.Parse(folderIdStr);
                    //  DotNetNuke.Services.FileSystem.FolderManager foldC = new DotNetNuke.Services.FileSystem.FolderManager();
                    //   DotNetNuke.Services.FileSystem.FileManager fileC = new DotNetNuke.Services.FileSystem.FileManager();
                    DotNetNuke.Services.FileSystem.FolderInfo foldInfo = (DotNetNuke.Services.FileSystem.FolderInfo)DotNetNuke.Services.FileSystem.FolderManager.Instance.GetFolder(folderId);
                    DotNetNuke.Services.FileSystem.FileInfo fileInfo = (DotNetNuke.Services.FileSystem.FileInfo)DotNetNuke.Services.FileSystem.FileManager.Instance.AddFile(foldInfo, file.FileName, file.InputStream);
                    //Définition des settings pour la création des thumbnails
                    ImageResizer.ResizeSettings resizeSettings = new ImageResizer.ResizeSettings(100, 100, ImageResizer.FitMode.Max, "png");
                    //création du thumbnail
                    System.Drawing.Bitmap thumbnail = ImageResizer.ImageBuilder.Current.Build(fileInfo.PhysicalPath, resizeSettings);

                    string thumbUrl = fileInfo.PhysicalPath.Replace(file.FileName, string.Format(Components.Constants.prefixThumb, file.FileName));
                    //un préfixe est ajouté, à passer en constante
                    System.IO.Stream thumbStream = new System.IO.MemoryStream();
                    //thumbnail.Save(thumbUrl);
                    thumbnail.Save(thumbStream, System.Drawing.Imaging.ImageFormat.Png);

                    string thumbFileName = file.FileName.Replace(file.FileName, string.Format(Components.Constants.prefixThumb, file.FileName));

                    DotNetNuke.Services.FileSystem.IFileInfo thumbFileInfo = DotNetNuke.Services.FileSystem.FileManager.Instance.AddFile(foldInfo, thumbFileName, thumbStream);


                    //Todo : Modifier le root de destination
                    /*String path = context.Server.MapPath(String.Format("~/Portals/{0}/SPA_Gallery_{1}/",
                                        portalId.ToString(), moduleId.ToString()));

                                    //Création du répertoire cible si il n'existe pas
                                    if (!System.IO.Directory.Exists(path))
                                    {
                                        System.IO.Directory.CreateDirectory(path);
                                    }

               

                                    Components.ImageEntity newFile = new Components.ImageEntity();
                                
                                    //Nom du fichier uploadé
                                    newFile.FileName = file.FileName;

                                    newFile.FullUrl = System.IO.Path.Combine(path, file.FileName);

                                    //Définition des settings pour la création des thumbnails
                                    ImageResizer.ResizeSettings resizeSettings = new ImageResizer.ResizeSettings(100, 100, ImageResizer.FitMode.Max, "png");

                                    //Enregistrement du fichier, le fichier doit exister pour l'appel à ImageResizer
                                    file.SaveAs(newFile.FullUrl);

                                    //création du thumbnail
                                    System.Drawing.Bitmap thumbnail = ImageResizer.ImageBuilder.Current.Build(newFile.FullUrl, resizeSettings);

                                    newFile.ThumbUrl = System.IO.Path.Combine(path, "thumb_" + file.FileName);
                                    //un préfixe est ajouté, à passer en constante
                                    thumbnail.Save(newFile.ThumbUrl);
                
                                    //Les fichiers sont sauvegardés, a voir comment géré l'objet 'newFile' créé ainsi que la gallerie.
                                    //Comment l'id du fichier va être généré ?
                                    */
                    context.Response.ContentType ="text/plain";
                   // DataResponse responseObj = new DataResponse();
                    List<DataResponseJqueryFile> filesName = new List<DataResponseJqueryFile>();
                    filesName.Add(new DataResponseJqueryFile() { Name = file.FileName, Length = file.ContentLength, Type = file.ContentType, Thumbnail_url = string.Format("/portals/{0}/{1}", thumbFileInfo.PortalId, thumbFileInfo.RelativePath) });
                    //responseObj.result = new DataResponseResult() { files = filesName };
                    System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
                    context.Response.Write(serializer.Serialize(new DataResponseResult() { files = filesName }));
                }
                // System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();

            }
        }

      

        public class DataResponseResult
        {
            public List<DataResponseJqueryFile> files { get; set; }
        }

        public class DataResponseJqueryFile
        {
            public string Thumbnail_url { get; set; }
            public string Name { get; set; }
            public int Length { get; set; }
            public string Type { get; set; }
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}